package base.string;


/*
1，模拟一个trim方法，去除字符串两端的空格。
	思路：
	1，判断字符串第一个位置是否是空格，如果是继续向下判断，直到不是空格为止。
		结尾处判断空格也是如此。
	2，当开始和结尾都判断到不是空格时，就是要获取的字符串。



2，将一个字符串进行反转。将字符串中指定部分进行反转，"abcdefg";abfedcg
	思路：
	1，曾经学习过对数组的元素进行反转。
	2，将字符串变成数组，对数组反转。
	3，将反转后的数组变成字符串。
	4，只要将或反转的部分的开始和结束位置作为参数传递即可。


*/

public class StringTest {

    public static void sop(String str) {
        System.out.println(str);
    }

    public static void main(String[] args) {
        String s = "      ab cd      ";

        sop("(" + s + ")");
//		s = myTrim(s);
//		sop("("+s+")");

        sop("(" + reverseString(s) + ")");

    }


    //练习二：将字符串反转。
	/*
	思路：
	1，将字符串变成数组。
	2，对数组反转。
	3，将数组变成字符串。
	*/

    public static String reverseString(String s, int start, int end) {
        //字符串变数组。
        char[] chs = s.toCharArray();

        //反转数组。
        reverse(chs, start, end);

        //将数组变成字符串。
        return new String(chs);
    }

    public static String reverseString(String s) {
        return reverseString(s, 0, s.length());

    }

    private static void reverse(char[] arr, int x, int y) {
        for (int start = x, end = y - 1; start < end; start++, end--) {
            swap(arr, start, end);
        }
    }

    private static void swap(char[] arr, int x, int y) {
        char temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;
    }

    //练习一，去除字符串两端空格。
    // 1，对于要去除字符串两端的空格，可以设置前后两个指针，
    // 2，但是前一个指针数要小于后一个st<=end并且要保证，指针指向的是空格如果满足条件指针加一，
    // 3，最后利用substring的特点进行取值
    public static String myTrim(String str) {
        int start = 0, end = str.length() - 1;// 减一是为了让end适应数组的脚标特点
        while (start <= end && str.charAt(start) == ' ') start++;
        while (start <= end && str.charAt(end) == ' ') end--;
        return str.substring(start, end + 1);//end+1是为了适应substring包含头不包含未
    }


}
